package model;

import java.sql.*;
import java.util.HashMap;

import javax.swing.JOptionPane;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;

public class ConectBanco {
	String forName = "org.postgresql.Driver";
	String local = "jdbc:postgresql://localhost:5432/controleescolar";
	//String local = "jdbc:postgresql://localhost:5432/ControleEscolarBanco";
	String user = "postgres";

	String password = "1234";
	//String password = "1234";
	String sqlInsCadastro = "INSERT INTO ALUNO(nome,cpf,data_nascimento,endereco,bairro,cidade,uf,observacao,documento,foto) VALUES('";

	
	String sqlInsCadastroAluno = "INSERT INTO ALUNO(nome_aluno,cpf_aluno,data_nascimento_aluno,endereco_aluno,bairro_aluno,cidade_aluno,uf_aluno,observacao_aluno,documento_aluno,foto_aluno) VALUES('";
	String sqlAtuCadastroAluno = "UPDATE aluno SET ";
	
	String sqlInsCadastroProfessor = "INSERT INTO professor(nome_professor,cpf_professor,data_nascimento_professor,endereco_professor,bairro_professor,cidade_professor,uf_professor,observacao_professor,documento_professor,foto_professor) VALUES('";
	String sqlAtuCadastroProfessor = "UPDATE INTO professor(nome_professor,cpf_professor,data_nascimento_professor,endereco_professor,bairro_professor,cidade_professor,uf_professor,observacao_professor,documento_professor,foto_professor) VALUES('";
	
	String sqlInsCadastroFuncionario = "INSERT INTO funcionario(nome_funcionario,cpf_funcionario,data_nascimento_funcionario,endereco_funcionario,bairro_funcionario,cidade_funcionario,uf_funcionario,observacao_funcionario,documento_funcionario,foto_funcionario) VALUES('";
	String sqlAtuCadastroFuncionario = "UPDATE INTO funcionario(nome_funcionario,cpf_funcionario,data_nascimento_funcionario,endereco_funcionario,bairro_funcionario,cidade_funcionario,uf_funcionario,observacao_funcionario,documento_funcionario,foto_funcionario) VALUES('";
	
	String sqlInsDisciplina = "INSERT INTO DISCIPLINA(nome_disciplina,descricao_disciplina,id_curso_disciplina) VALUES('";
	String sqlInsLeciona = "INSERT INTO LECIONA(id_disciplina_leciona,cpf_leciona) VALUES('";
	String sqlInsCurso = "INSERT INTO curso(nome_curso,descricao_curso,turno_curso) VALUES('";
	String sqlInsMatricula = "INSERT INTO matricula(cpf_matricula,id_curso_matricula,data_matricula) VALUES('";
	

	String sqlExcDados = "DELETE FROM TABELA ";
	String sqlAtuDados = "DELETE FROM TABELA ";	

    public ConectBanco(){
    }
    
    public Connection getConexao(){
    	Connection conn = null;
    	try {
            Class.forName(forName);
            conn = DriverManager.getConnection(local,user,password);
		} catch (Exception e) {
            e.printStackTrace();
		}
		return conn;
    }
    
    // Retornar Dados do Banco
    public Object getCadastro(){
    	try {
            Class.forName(forName);
            Connection connection = DriverManager.getConnection(local,user,password);
            Statement statement = connection.createStatement();
            ResultSet resultset = statement.executeQuery("SELECT * FROM TABELA");
            resultset.close();
            statement.close();
            connection.close();
		} catch (Exception e) {
            e.printStackTrace();
		}
		return "";
    }
        //Inserir Dados no Banco
     public void inserirAlunoNoBanco(String nome, String cpf, String data_nascimento, 

String endereco, String bairro, String cidade, String uf, String observacao, String 

documento, String foto){
        try
        {
            Class.forName(forName);
            Connection connection = DriverManager.getConnection(local,user,password);
            Statement statement = connection.createStatement();
            connection.setAutoCommit(false);
            statement.execute(sqlInsCadastroAluno+nome+"','"+cpf+"','"+data_nascimento

+"','"+endereco+"','"+bairro+"','"+cidade+"','"+uf+"','"+observacao+"','"+documento

+"','"+foto+"')");
            connection.commit();            
            connection.commit();
            statement.close();
            connection.close();
        }
        catch (SQLException e) {    
    	   e.printStackTrace();
    	}
        catch(Exception exception)
        {
            exception.printStackTrace();
        }
   }
    
    public void atualizarAlunoNoBanco(String nome, String cpf, String data_nascimento, 

    		String endereco, String bairro, String cidade, String uf, String observacao, String 

    		documento, String foto){
    		        try
    		        {
    		            Class.forName(forName);
    		            Connection connection = DriverManager.getConnection(local,user,password);
    		            Statement statement = connection.createStatement();
    		            connection.setAutoCommit(false);
   //  , endereco_aluno =,bairro_aluno =,cidade_aluno =,uf_aluno =,observacao_aluno =
   statement.execute(sqlAtuCadastroAluno+ " nome_aluno = '"+nome +"',"+ " endereco_aluno = '"+endereco+"'"+
		   " WHERE cpf_aluno = '"+cpf+"'");
    		            connection.commit();            
    		            connection.commit();
    		            statement.close();
    		            connection.close();
    		        }
    		        catch (SQLException e) {    
    		    	   e.printStackTrace();
    		    	}
    		        catch(Exception exception)
    		        {
    		            exception.printStackTrace();
    		        }
    		   }
    public void atualizarProfessorNoBanco(String nome, String cpf, String data_nascimento, 

    		String endereco, String bairro, String cidade, String uf, String observacao, String 

    		documento, String foto){
    		        try
    		        {
    		            Class.forName(forName);
    		            Connection connection = DriverManager.getConnection(local,user,password);
    		            Statement statement = connection.createStatement();
    		            connection.setAutoCommit(false);
    		            statement.execute(sqlAtuCadastroProfessor+nome+"','"+cpf+"','"+data_nascimento

    		+"','"+endereco+"','"+bairro+"','"+cidade+"','"+uf+"','"+observacao+"','"+documento

    		+"','"+foto+" WHERE cpf_professor = '"+cpf+"')");
    		            connection.commit();            
    		            connection.commit();
    		            statement.close();
    		            connection.close();
    		        }
    		        catch (SQLException e) {    
    		    	   e.printStackTrace();
    		    	}
    		        catch(Exception exception)
    		        {
    		            exception.printStackTrace();
    		        }
    		   }

     // Inserir professor no banco de dados.
     public void inserirProfessorNoBanco(String nome, String cpf, String data_nascimento, 

    		 String endereco, String bairro, String cidade, String uf, String observacao, String 

    		 documento, String foto){
    		         try
    		         {
    		             Class.forName(forName);
    		             Connection connection = DriverManager.getConnection(local,user,password);
    		             Statement statement = connection.createStatement();
    		             connection.setAutoCommit(false);
    		             statement.execute(sqlInsCadastroProfessor+nome+"','"+cpf+"','"+data_nascimento

    		 +"','"+endereco+"','"+bairro+"','"+cidade+"','"+uf+"','"+observacao+"','"+documento

    		 +"','"+foto+"')");
    		             connection.commit();            
    		             connection.commit();
    		             statement.close();
    		             connection.close();
    		         }
    		         catch (SQLException e) {    
    		     	   e.printStackTrace();
    		     	}
    		         catch(Exception exception)
    		         {
    		             exception.printStackTrace();
    		         }
    		    }
     
     // Inserir Funcionario no Banco de Dados
     public void inserirFuncionarioNoBanco(String nome, String cpf, String data_nascimento, 

    		 String endereco, String bairro, String cidade, String uf, String observacao, String 

    		 documento, String foto){
    		         try
    		         {
    		             Class.forName(forName);
    		             Connection connection = DriverManager.getConnection(local,user,password);
    		             Statement statement = connection.createStatement();
    		             connection.setAutoCommit(false);
    		             statement.execute(sqlInsCadastroFuncionario+nome+"','"+cpf+"','"+data_nascimento

    		 +"','"+endereco+"','"+bairro+"','"+cidade+"','"+uf+"','"+observacao+"','"+documento

    		 +"','"+foto+"')");
    		             connection.commit();            
    		             connection.commit();
    		             statement.close();
    		             connection.close();
    		         }
    		         catch (SQLException e) {    
    		     	   e.printStackTrace();
    		     	}
    		         catch(Exception exception)
    		         {
    		             exception.printStackTrace();
    		         }
    		    }
     
     public void atualizarFuncionarioNoBanco(String nome, String cpf, String data_nascimento, 

    		 String endereco, String bairro, String cidade, String uf, String observacao, String 

    		 documento, String foto){
    		         try
    		         {
    		             Class.forName(forName);
    		             Connection connection = DriverManager.getConnection(local,user,password);
    		             Statement statement = connection.createStatement();
    		             connection.setAutoCommit(false);
    		             statement.execute(sqlAtuCadastroFuncionario+nome+"','"+cpf+"','"+data_nascimento

    		 +"','"+endereco+"','"+bairro+"','"+cidade+"','"+uf+"','"+observacao+"','"+documento

    		 +"','"+foto+"')");
    		             connection.commit();            
    		             connection.commit();
    		             statement.close();
    		             connection.close();
    		         }
    		         catch (SQLException e) {    
    		     	   e.printStackTrace();
    		     	}
    		         catch(Exception exception)
    		         {
    		             exception.printStackTrace();
    		         }
    		    }
    //Remover Dados do Banco
    public void excluirCadastro(Object a1,Object a2){
        try{
            Class.forName(forName);
            Connection connection = DriverManager.getConnection(local,user,password);
            Statement statement = connection.createStatement();
            ResultSet resultset = statement.executeQuery("SELECT * FROM TABELA");
       		statement.execute(sqlExcDados+" WHERE CAMPO1 ='"+a1+"' AND CAMPO2 ='"+a2+"' ");
            resultset.close();
            statement.close();
            connection.close();
        }
        catch(Exception exception)
        {
            exception.printStackTrace();
        }
    }
    
    //Pesquisa Login
    public boolean getLogin(String usuario,String senha){
    	boolean resultado = false;
        try{
            Class.forName(forName);
            Connection connection = DriverManager.getConnection(local,user,password);
            Statement statement = connection.createStatement();
      		ResultSet resultset = statement.executeQuery("SELECT * FROM USER "+
            "WHERE CAMPO_USUARIO ='"+usuario+"' AND CAMPO_SENHA ='"+senha+"' ");
      		resultset.last();
       			int count = resultset.getRow();
       				if (count>0){ 
       					resultado = true;
       				}
            resultset.close();
            statement.close();
            connection.close();
        }
        catch(Exception exception)
        {
            exception.printStackTrace();
        }
        return resultado;
    }

    
	public JasperPrint gerar() throws Exception{
		JasperPrint rel = null;
		try {
            Class.forName(forName);
            Connection con = DriverManager.getConnection(local,user,password);
			HashMap  map = new HashMap();
			String arquivoJasper = "alunocurso.jasper";
			rel = JasperFillManager.fillReport(arquivoJasper, map, con);
		} catch (JRException e) {
			JOptionPane.showMessageDialog(null,e.getMessage());
		}
		return rel;
	}
    
    


    
    
    //TESTE
    //Pesquisar Aluno no banco de Dados
    public String[] pesquisarAlunoNoBanco(String cpf){
    	System.out.println("CPF de Pesquisar: "+cpf);
		String resultadoAluno[] = new String[11];
       	try {
            Class.forName(forName);
            Connection connection = DriverManager.getConnection(local,user,password);
            Statement statement = connection.createStatement();
      		ResultSet resultset = statement.executeQuery("SELECT * FROM aluno "+"WHERE cpf_aluno ='"+cpf+"' ");
      			resultset.next();
     			resultadoAluno[0]=resultset.getObject(2).toString();
      			resultadoAluno[1]=resultset.getObject(3).toString();
      			resultadoAluno[2]=resultset.getObject(4).toString();
      			resultadoAluno[3]=resultset.getObject(5).toString();
      			resultadoAluno[4]=resultset.getObject(6).toString();
      			resultadoAluno[5]=resultset.getObject(7).toString();
      			resultadoAluno[6]=resultset.getObject(8).toString();
      			resultadoAluno[8]=resultset.getObject(9).toString();
      			resultadoAluno[9]=resultset.getObject(10).toString();
      			resultadoAluno[10]=resultset.getObject(11).toString();
    		resultset.close();
            statement.close();            	
            connection.close();
		} catch (Exception e) {
            e.printStackTrace();
		}
		return resultadoAluno;
    }
    //Pesquisar Professor no banco de Dados
    public String[] pesquisarProfessorNoBanco(String cpf){
		String resultadoProfessor[] = new String[11];
       	try {
            Class.forName(forName);
            Connection connection = DriverManager.getConnection(local,user,password);
            Statement statement = connection.createStatement();
      		ResultSet resultset = statement.executeQuery("SELECT * FROM professor "+"WHERE cpf_professor ='"+cpf+"' ");
      			resultset.next();
      			resultadoProfessor[0]=resultset.getObject(2).toString();
      			resultadoProfessor[1]=resultset.getObject(3).toString();
      			resultadoProfessor[2]=resultset.getObject(4).toString();
      			resultadoProfessor[3]=resultset.getObject(5).toString();
      			resultadoProfessor[4]=resultset.getObject(6).toString();
      			resultadoProfessor[5]=resultset.getObject(7).toString();
      			resultadoProfessor[6]=resultset.getObject(8).toString();
      			resultadoProfessor[8]=resultset.getObject(9).toString();
      			resultadoProfessor[9]=resultset.getObject(10).toString();
      			resultadoProfessor[10]=resultset.getObject(11).toString();
    		resultset.close();
            statement.close();            	
            connection.close();
		} catch (Exception e) {
            e.printStackTrace();
		}
		return resultadoProfessor;
    }
    //Pesquisar Funcionario no banco de Dados
    public String[] pesquisarFuncionarioNoBanco(String cpf){
		String resultadoFuncionario[] = new String[11];
       	try {
            Class.forName(forName);
            Connection connection = DriverManager.getConnection(local,user,password);
            Statement statement = connection.createStatement();
      		ResultSet resultset = statement.executeQuery("SELECT * FROM funcionario "+"WHERE cpf_funcionario ='"+cpf+"' ");
      			resultset.next();
     			resultadoFuncionario[0]=resultset.getObject(2).toString();
      			resultadoFuncionario[1]=resultset.getObject(3).toString();
      			resultadoFuncionario[2]=resultset.getObject(4).toString();
      			resultadoFuncionario[3]=resultset.getObject(5).toString();
      			resultadoFuncionario[4]=resultset.getObject(6).toString();
      			resultadoFuncionario[5]=resultset.getObject(7).toString();
      			resultadoFuncionario[6]=resultset.getObject(8).toString();
      			resultadoFuncionario[8]=resultset.getObject(9).toString();
      			resultadoFuncionario[9]=resultset.getObject(10).toString();
      			resultadoFuncionario[10]=resultset.getObject(11).toString();
    		resultset.close();
            statement.close();            	
            connection.close();
		} catch (Exception e) {
            e.printStackTrace();
		}
		return resultadoFuncionario;
    }
    

    
    
    // Buscar a lista de todos CURSOS.
         public String[][] buscarCursos(){
     	String listaCursos[][] = null;
     	int count= 0;
 	       	try {
             Class.forName(forName);
             Connection connection = DriverManager.getConnection(local,user,password);
             Statement statement = connection.createStatement();
       		ResultSet resultset = statement.executeQuery("SELECT * FROM curso");      		
 	      		
       			while(resultset.next()){
       				count++;
       			}
 	      		resultset.close();
 	      		
 	      		listaCursos = new String[count][2];
 	      		resultset = statement.executeQuery("SELECT * FROM curso");
 	      		
 	      		int i = 0;
 	      		System.out.println("Antes do While   -   "+count);
 		      		while(resultset.next()){
 		      			listaCursos[i][0] = resultset.getObject(2).toString(); // Nome do curso
 		      			listaCursos[i][1] = resultset.getObject(1).toString(); // ID do curso
 		      	 		//System.out.println("Curso: "+listaCursos[i][0]+"\n ID: "+listaCursos[i][1]);
 		      			i++;
 		      		}    			
     		resultset.close();
             statement.close();            	
             connection.close();
 		} catch (Exception e) {
             e.printStackTrace();
 		}
 		
 		
 		
 		return listaCursos;
     }

        
         
         
      // Buscar a lista de todos PROFESSORES.
         public String[][] buscarProfessores(){
     	String listaProfessor[][] = null;
     	int count = 0;
 	       	try {
             Class.forName(forName);
             Connection connection = DriverManager.getConnection(local,user,password);
             Statement statement = connection.createStatement();
       		ResultSet resultset = statement.executeQuery("SELECT * FROM professor");
 	      		
 	      		
 	      		resultset = statement.executeQuery("SELECT * FROM professor");
 	      		while(resultset.next()){
       				count++;
       			}
 	      		resultset.close();
 	      		listaProfessor = new String[count][2];
 	      		listaProfessor = new String[count][2];
 	      		resultset = statement.executeQuery("SELECT * FROM professor");
 	      		
 	      		int i = 0;
 	      		
 		      		while(resultset.next()){
 		      			listaProfessor[i][0] = resultset.getObject(2).toString(); // Nome do Professor
 		      			listaProfessor[i][1] = resultset.getObject(3).toString(); // CPF do Professor
 		      	 		//System.out.println("Nome: "+listaProfessor[i][0]+"\n ID: "+listaProfessor[i][1]);
 		      			i++;
 		      		}    	    			
     		resultset.close();
             statement.close();            	
             connection.close();
 		} catch (Exception e) {
             e.printStackTrace();
 		}
 		return listaProfessor;
     }
     
         
         public void inserirDisciplinaNoBanco(String nomeDisciplina, String cpfProfessor, String descricao, String idDoCurso){
        		         try
        		         {
        		             Class.forName(forName);
        		             Connection connection = DriverManager.getConnection(local,user,password);
        		             Statement statement = connection.createStatement();
        		             connection.setAutoCommit(false);
        		             statement.execute(sqlInsDisciplina+nomeDisciplina+"','"+descricao+"','"+idDoCurso+"')");
        		             connection.commit();            
        		             connection.commit();
        		             statement.close();
        		             connection.close();
        		         }
        		         catch (SQLException e) {    
        		     	   e.printStackTrace();
        		     	}
        		         catch(Exception exception)
        		         {
        		             exception.printStackTrace();
        		         }
        		    }
         
         public void inserirLecionaNoBanco(String id_disciplina, String cpfProfessor){
	         try
	         {
	             Class.forName(forName);
	             Connection connection = DriverManager.getConnection(local,user,password);
	             Statement statement = connection.createStatement();
	             connection.setAutoCommit(false);
	             statement.execute(sqlInsLeciona+id_disciplina+"','"+cpfProfessor+"')");
	             connection.commit();            
	             connection.commit();
	             statement.close();
	             connection.close();
	         }
	         catch (SQLException e) {    
	     	   e.printStackTrace();
	     	}
	         catch(Exception exception)
	         {
	             exception.printStackTrace();
	         }
	    }
         
         public String buscaDisciplina(String nomeDisciplina){
         	String resultado = null;
             try{
                 Class.forName(forName);
                 Connection connection = DriverManager.getConnection(local,user,password);
                 Statement statement = connection.createStatement();
           		ResultSet resultset = statement.executeQuery("SELECT * FROM disciplina "+
                 "WHERE nome_disciplina = '"+nomeDisciplina+"'");
           		resultset.next();
           		resultado = resultset.getObject(1).toString();
                 resultset.close();
                 statement.close();
                 connection.close();
                 
             
             }
             catch(Exception exception)
             {
                 exception.printStackTrace();
             }
             return resultado;
         }
         
         //Inserir Dados no Banco
         public void inserirCursoNoBanco(String nome, String descricao, String turno){
            try
            {
                Class.forName(forName);
                Connection connection = DriverManager.getConnection(local,user,password);
                Statement statement = connection.createStatement();
                connection.setAutoCommit(false);
                statement.execute(sqlInsCurso+nome+"','"+descricao+"','"+turno+"')");
                connection.commit();            
                connection.commit();
                statement.close();
                connection.close();
            }
            catch (SQLException e) {    
        	   e.printStackTrace();
        	}
            catch(Exception exception)
            {
                exception.printStackTrace();
            }
       }

		public void inserirMatriculaNoBanco(String cpfAluno, String idCurso, String data) {
		
			try
            {
                Class.forName(forName);
                Connection connection = DriverManager.getConnection(local,user,password);
                Statement statement = connection.createStatement();
                connection.setAutoCommit(false);
                statement.execute(sqlInsMatricula+cpfAluno+"','"+idCurso+"','"+data+"')");
                connection.commit();            
                connection.commit();
                statement.close();
                connection.close();
            }
            catch (SQLException e) {    
        	   e.printStackTrace();
        	}
            catch(Exception exception)
            {
                exception.printStackTrace();
            }
		}
}


